/*******************************************************************************
*	                           bsp lib.c
*******************************************************************************/
#include "bsp.h"
#include "lib_surport.h"
#include "framework.h"

/*******************************************************************************
 * @brief  malloc
 * \param[in] size
 * \retval: mem *p
 *******************************************************************************/
void *lib_malloc(size_t size)
{
	return malloc(size);
}

/*******************************************************************************
 * @brief  free
 * \param[in] *p
 * \retval: none
 *******************************************************************************/
void lib_free(void *p)
{
	free(p);
}

/*******************************************************************************
* @brief  lib_delay_0_5us
* \param[in] u0_5us : 0.5us
* \retval: none
*******************************************************************************/
void lib_delay_0_5us(uint16_t u0_5us)
{
	NOP40();
	NOP40();
	NOP40();
	NOP24();
}

/*******************************************************************************
* @brief  lib_delay_us
* \param[in] us
* \retval: none
*******************************************************************************/
void lib_delay_us(uint16_t us)
{
    uint32_t tCnt, tDelayCnt;
	uint32_t tStart;
		
	tStart = DWT->CYCCNT;                                    
	tCnt = 0;
	tDelayCnt = us * cpu_freq_mhz-10;	                  		      

	while(tCnt < tDelayCnt)
	{
    	bsp_dwt_check();
		tCnt = DWT->CYCCNT - tStart;   //overflow is ok
	}
}

/*******************************************************************************
* @brief  lib_delay_ms
* \param[in] ms
* \retval: none
*******************************************************************************/
void lib_delay_ms(uint16_t ms)
{
	osDelay(ms_ticks(ms));
}
